﻿//------------------------------------------------------------------------------
// ╭─────────────────────────────╮
// │ ╭─╮     ╭─╮              TM │   ╠═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╣
// │ │ │     │ │                 │                                           ☺  
// │ │ ╰───╮ │ │ ╭─────╮ ╭─────╮ │     Name:Wedn.Net 错误处理类        ♮ ♪ ♩
// │ │ ╭─╮ │ │ │ │ ╭─╮ │ │ ╭─╮ │ │                                    ♫ ♭      
// │ │ ╰─╯ │ │ │ │ ╰─╯ │ │ ╰─╯ │ │     Author:iceStone               ♬ ♪       
// │ └─────╯ └─╯ ╰─────╯ ╰───╮ │ │     Chinese:汪磊                              
// │                     ┌───╯ │ │                                              
// │                     ╰─────╯ │   ╠═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╬═╣
// ╰─────────────────────────────╯                                              
//------------------------------------------------------------------------------

using System;
using System.IO;
using System.Text;
using System.Web.Mvc;
using Wedn.Net.Common;
using Wedn.Net.Utility;

namespace Wedn.Net.Controller.Attribute
{
    /// <summary>
    /// 错误处理类
    /// </summary>
    public class ErrorAttribute : IExceptionFilter
    {
        /// <summary>
        /// 异常发生
        /// </summary>
        /// <param name="filterContext">发生异常的上下文</param>
        public void OnException(ExceptionContext filterContext)
        {
            if (!Setting.ShowErrorPage)
            {
                filterContext.HttpContext.Response.Clear();
                filterContext.HttpContext.Response.StatusCode = 500;
                filterContext.HttpContext.Response.WriteFile(filterContext.HttpContext.Server.MapPath("/views/shared/500.html"));
                filterContext.HttpContext.Response.End();
            }
            ErrorHelper.WriteLog(filterContext.Exception.ToString());
        }
        //public void LogError(ExceptionContext filterContext)
        //{
        //    // You could use any logging approach here

        //    StringBuilder builder = new StringBuilder();
        //    builder
        //        .AppendLine("----------")
        //        .AppendLine(DateTime.Now.ToString())
        //        .AppendFormat("Source:\t{0}", filterContext.Exception.Source)
        //        .AppendLine()
        //        .AppendFormat("Target:\t{0}", filterContext.Exception.TargetSite)
        //        .AppendLine()
        //        .AppendFormat("Type:\t{0}", filterContext.Exception.GetType().Name)
        //        .AppendLine()
        //        .AppendFormat("Message:\t{0}", filterContext.Exception.Message)
        //        .AppendLine()
        //        .AppendFormat("Stack:\t{0}", filterContext.Exception.StackTrace)
        //        .AppendLine();

        //    string filePath = filterContext.HttpContext.Server.MapPath("~/App_Data/Error.log");

        //    using (StreamWriter writer = File.AppendText(filePath))
        //    {
        //        writer.Write(builder.ToString());
        //        writer.Flush();
        //    }
        //}
    }
}
